
/*-----------------------------------------------------------------------------\
|                          ChipCFlow Block2Code V1.0                           |
|                                                                              |
| Desenvolvedor: Felipe Simões Lage Gomes Duarte                               |
| Orientador: Prof. Dr. Jorge Luiz e Silva                                     |
| Supervisor: Bruno de Abreu Silva                                             |
|	      Joelmir José Lopes                                               |
|                                                                              |
| Main Project: ChipCflow                                                      |
| Período: Agosto de 2009 a Julho de 2010                                      |
| Codigo: Operadores.java                                                      |
| Versão da IDE: NetBeans IDE 6.8 (Build 200912041610)                         |
| Java: 1.6.0_18; Java HotSpot(TM) Client VM 16.0-b13                          |
| Sistema Operacional: Windows 7 versão 6.1 executando em x86; pt_BR           |
|                                                                              |
|             O presente trabalho foi realizado com apoio do CNPq              |
|   Conselho Nacional de Desenvolvimento Científico  e Tecnológico - Brasil    |
\-----------------------------------------------------------------------------*/

/*-----------------------------------------------------------------------------\
|                          ChipCFlow Block2Code V2.0                           |
|                                                                              |
| Desenvolvedor: Felipe Simões Lage Gomes Duarte                               |
| Orientador: Prof. Dr. Jorge Luiz e Silva                                     |
|                                                                              |
| Main Project: ChipCflow                                                      |
| Período: Agosto de 2010 a Julho de 2011                                      |
| Codigo: Main.java                                                            |
| Versão da IDE: NetBeans IDE 6.9.1 (Build 201011082200)                       |
| Java: 1.6.0_21; Java HotSpot(TM) Client VM 17.0-b17                          |
| Sistema Operacional: Windows 7 versão 6.1 executando em x86; pt_BR (nb)      |
|                                                                              |
|             O presente trabalho foi realizado com apoio do CNPq              |
|   Conselho Nacional de Desenvolvimento Científico  e Tecnológico - Brasil    |
\-----------------------------------------------------------------------------*/

package components;//Nome do pacote de dados.

//declaraçao das classes importadas
import java.awt.Color;
import java.awt.Graphics2D;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;

/*Classe abstrata: implementação dos metodos abstratos cabe as classes que herda*/
abstract public class Operadores implements Components, Serializable{

  //atributo cor da forma
  protected Color Cor;//cor do operador
  protected int Mx, My;//coordenadas do mouse
  protected int rotacao;//grau de rotaçao
  protected String OpName;//nome do operador
  protected ArrayList<Conector> bar; //vetor de barramentos
  protected static int numInstancia = 0;

  public Operadores(){
    this.Cor = new Color(0, 0, 0);
    this.Mx = 0;
    this.My = 0;
    this.rotacao = 0;
    this.OpName = null;
    this.bar = new ArrayList<Conector>();
  }

  public Color getCor() {
    return Cor;
  }

  public void setCor(Color Cor) {
    this.Cor = Cor;
  }

  public void setCoordenada(int Mx, int My) {
    this.Mx = Mx;
    this.My = My;
  }

  public int getMx() {
    return Mx;
  }

  public void setMx(int Mx) {
    this.Mx = Mx;
  }

  public int getMy() {
    return My;
  }

  public void setMy(int My) {
    this.My = My;
  }

  public String getOpName() {
    return OpName;
  }

  public void setOpName(String OpName) {
    this.OpName = OpName;
  }

  public int getRotacao() {
    return rotacao;
  }

  public void setRotacao(int rotacao) {
    this.rotacao = rotacao;
  }  

  public Iterator<Conector> getBar(){
    return this.bar.iterator();
  }

  public void mover(int Xi, int Yi, int Xf, int Yf) {
    int difX = Xf - Xi;
    int difY = Yf - Yi;
    this.Mx = this.Mx + difX;
    this.My = this.My + difY;
  }

  public void mover(int Dx, int Dy) {
    Mx = Mx + Dx;
    My = My + Dy;
  }

  /*----- Metodos abstratos -----*/
  public abstract void desenha(Graphics2D g);//metodo para desenha forma

  public abstract boolean procuraForma(int X, int Y);

  public abstract void updateBarName();
  
}
